package com.xbongbong.saas.factory.publicrule;

import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.field.ItemPoJo;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.saas.domain.entity.CustomerRuleEntity;
import com.xbongbong.saas.domain.entity.RuleCustomerEntity;
import com.xbongbong.sys.domain.entity.UserEntity;

import java.util.List;

/**
 * 规则功能接口类
 * @author : chy
 * @date 创建时间：2018-5-16 下午6:48:31
 * @version v3.22
 */
public interface ICheckRule {

	/**
	 * 获取规则需要退回公海的客户列表 （打标签用）
	 * @param userEntity 用户
	 * @param rule 规则
	 * @param customerList 用户的客户列表（不一定是所有的客户）
	 * @param advanceTime 提前量
	 * @return
	 * @throws XbbException
	 * 创建时间： 2018-5-23 上午9:41:37
	 * 修改时间： 2018-5-23 上午9:41:37 chy
	 * @author chy
	 * @since v3.22
	 * @version v3.22
	 */
	public List<RuleCustomerEntity> getBackCustomerList(UserEntity userEntity, CustomerRuleEntity rule, List<RuleCustomerEntity> customerList, Integer advanceTime) throws XbbException ;

	/**
	 * 获取规则需要退回公海的客户列表
	 * @param userEntity 用户
	 * @param rule 规则
	 * @param customerList 用户的客户列表（不一定是所有的客户）
	 * @return
	 * @throws XbbException
	 * 创建时间： 2018-5-23 上午9:41:37
	 * 修改时间： 2018-5-23 上午9:41:37 chy
	 * @author chy
	 * @since v3.22
	 * @version v3.22
	 */
	public List<RuleCustomerEntity> getBackCustomerList(UserEntity userEntity, CustomerRuleEntity rule, List<RuleCustomerEntity> customerList) throws XbbException ;

	/**
	 * 判断在该规则下，员工是否可以获取客户
	 *
	 * @param rule       规则信息
	 * @param corpid     公司id
	 * @param userEntity 用户
	 * @param customerId 需获取的客户
	 * @param data 数据data部分
	 * @return
	 * @throws XbbException 创建时间： 2018-5-22 下午3:18:17
	 *                      修改时间： 2018-5-22 下午3:18:17 chy
	 * @author chy
	 * @version v3.22
	 * @since v3.22
	 */
	public boolean canGainCustomer(CustomerRuleEntity rule, String corpid, UserEntity userEntity, Long customerId, int dataIdSize, JSONObject data) throws XbbException;

	/**
	 * 数据字典：客户状态 改变时，对客户公海规则对影响
	 * @param rule
	 * @param typeItemPoJos
	 * @return
	 * @throws XbbException
	 * 创建时间 2018/12/4 3:46 PM
	 * 修改时间 2018/12/4 3:46 PM
	 * @author chy
	 * @since v3.35
	 * @version v3.35
	 */
	public JSONObject customerTypeChage(CustomerRuleEntity rule, List<ItemPoJo> typeItemPoJos) throws XbbException;

}
